function firstMissingPositive(nums) {
    const n = nums.length;

    // 将每个元素放到它应该在的位置上
    for (let i = 0; i < n; i++) {
        while (nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] !== nums[i]) {
            // 交换 nums[i] 和 nums[nums[i] - 1]
            const temp = nums[nums[i] - 1];
            nums[nums[i] - 1] = nums[i];
            nums[i] = temp;
        }
    }

    // 查找缺失的最小正整数
    for (let i = 0; i < n; i++) {
        if (nums[i] !== i + 1) {
            return i + 1;
        }
    }

    // 如果所有位置都正确，则返回 n + 1
    return n + 1;
}

// 测试用例1: 基本情况
console.log(firstMissingPositive([1,2,0])); // 期望输出: 3

// 测试用例2: 缺失第一个正数
console.log(firstMissingPositive([3,4,-1,1])); // 期望输出: 2

// 测试用例3: 连续正整数
console.log(firstMissingPositive([7,8,9,11,12])); // 期望输出: 1

// 测试用例4: 完整序列
console.log(firstMissingPositive([1,2,3,4,5])); // 期望输出: 6

// 测试用例5: 单个元素
console.log(firstMissingPositive([1])); // 期望输出: 2
console.log(firstMissingPositive([2])); // 期望输出: 1

// 测试用例6: 包含重复元素
console.log(firstMissingPositive([1,1,2,2,3,3])); // 期望输出: 4

// 测试用例7: 全为负数
console.log(firstMissingPositive([-1,-2,-3])); // 期望输出: 1

// 测试用例8: 空数组
console.log(firstMissingPositive([])); // 期望输出: 1
